﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
using System.Net;

using EHTWebsite.Code;
using EHTWebsiteProject.Code.BLL;
using System.Resources;
using System.Threading;
using System.Globalization;
using System.Text;
using Telerik.Web.UI;
using System.Collections.Generic;
using EHTWebsiteProject.Code.Entity;

namespace EHTWebsiteProject.Administrator
{
    public partial class EHTCategoryCopy_Move : System.Web.UI.Page
    {
        public Boolean IsVN = true;
        private String Loai = "";
        private String languageCode = "vi-VN";
        private ResourceManager rm = new ResourceManager("Resources.SiteMap", System.Reflection.Assembly.Load("App_GlobalResources"));
         private DataTable dtProductCategorys = new DataTable();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                if (Session["UserName"] == null)
                    Response.Redirect("../Account/EHTLogin.aspx");
                else
                {
                    dtProductCategorys = DanhMucSanPhamProvider.GetDanhMucSanPhams(-1, "", "").Tables[0];

                    try
                    {
                        languageCode = Session[HangSo.LANGUAGE_CODE].ToString();
                        if (languageCode == "en-us")
                        {
                            IsVN = false;
                        }

                    }
                    catch (Exception ex)
                    {
                    }

                    try
                    {
                        Loai = Request.QueryString["Type"].ToString();
                        Session["Type"] = Loai;

                    }
                    catch (Exception ex)
                    {
                    }
                    if (Loai == "Move")
                    {
                        if (IsVN == true)
                            lbMove_Copy.Text = HangSo.Move_VN;
                        else
                            lbMove_Copy.Text = HangSo.Move_Other;
                    }
                    if (Loai == "Copy")
                    {
                        if (IsVN == true)
                            lbMove_Copy.Text = HangSo.Copy_VN;
                        else
                            lbMove_Copy.Text = HangSo.Copy_Other;
                    }
                    Thread.CurrentThread.CurrentCulture = new CultureInfo(languageCode);
                    LoadLanguage(Thread.CurrentThread.CurrentCulture);

                    CreateDDLCategory(0, 0);
                    if (IsVN == true)
                        this.ddlDanhmucSanPham.Items.Insert(0, new ListItem(HangSo.DanhMuc, "0"));
                    else
                        this.ddlDanhmucSanPham.Items.Insert(0, new ListItem(HangSo.DanhMucOther, "0"));
                }
            }
        }

        /// <summary>
        /// Ham load ngon ngu
        /// </summary>
        /// <param name="ci"></param>
        public void LoadLanguage(CultureInfo ci)
        {
            lbSave.Text = rm.GetString("lbSave", ci);
            lbHelp.Text = rm.GetString("lbHelp", ci);
            lbChon.Text = rm.GetString("lbChon",ci);
        }

        /// <summary>
        /// Ham load danh muc san pham
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CreateDDLCategory(Int32 ChuyenMucChaID, Int32 level)
        {
            String preString = "";

            for (Int32 i = 0; i < level; ++i)
            {
                preString += "--";
            }

            DataRow[] drCategorysSub = dtProductCategorys.Select("ChuyenMucChaID = " + ChuyenMucChaID.ToString());
            Int32 amountOfCategorySub = drCategorysSub.Count();

            //Điểm dừng đệ quy
            if (amountOfCategorySub == 0)
                return;

            for (Int32 i = 0; i < amountOfCategorySub; ++i)
            {
                Int32 subCategoryID = Int32.Parse(drCategorysSub[i]["DanhMucID"].ToString());
                ListItem li = new ListItem(preString + drCategorysSub[i]["TenDanhMucVN"].ToString(), drCategorysSub[i]["DanhMucID"].ToString());
                this.ddlDanhmucSanPham.Items.Add(li);
                CreateDDLCategory(subCategoryID, level + 1);
            }
        }

        /// <summary>
        /// Ham luu danh muc da copy hoac move
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        protected void ImgSave_Click(object sender, ImageClickEventArgs e)
        {
            // lấy danh mục sản phẩm theo Danh mục ID ở dropdowlist
            DanhMucSanPham theDanhMucCha = DanhMucSanPhamProvider.GetDanhMucSanPhamByDanhMucID(Int32.Parse(ddlDanhmucSanPham.SelectedValue));

            // nếu là copy
            if (Session["Type"].ToString() == "Copy")
            {
                // lấy giá trị trên sesion  gán vào mảng
                ArrayList arr = (ArrayList)Session["ArrayListID"];
                for (int i = 0; i < arr.Count; i++)
                {
                    // lấy đối tượng danh mục sản phẩm theo danhmucID trong array 
                    DanhMucSanPham theDanhMucSanPham = DanhMucSanPhamProvider.GetDanhMucSanPhamByDanhMucID(Int32.Parse(arr[i].ToString()));

                    //khoi tao đối tượng danh mục sản phẩm
                    DanhMucSanPham theDanhMuc = new DanhMucSanPham();
                    theDanhMuc.DanhMucID = -1;
                    theDanhMuc.IconTrangThai = theDanhMucSanPham.IconTrangThai;
                    theDanhMuc.LuongTruyCap = theDanhMucSanPham.LuongTruyCap;
                    theDanhMuc.ChuyenMucChaID = theDanhMucCha.DanhMucID;
                    
                    // gán level mới cho danh mục danh mục
                    Int32 Thuong = theDanhMucSanPham.MenuLevel - theDanhMucCha.MenuLevel; // kiểm tra sự chênh lệch level giữa cha cũ và cha mới
                    if (Thuong > 1)
                    {
                        theDanhMuc.MenuLevel = theDanhMucSanPham.MenuLevel - Thuong + 1;
                    }
                    else if(Thuong==1)
                        theDanhMuc.MenuLevel = theDanhMucSanPham.MenuLevel;
                    else
                        theDanhMuc.MenuLevel = theDanhMucCha.MenuLevel + theDanhMucSanPham.MenuLevel;


                    theDanhMuc.SapXep = theDanhMucSanPham.SapXep;
                    theDanhMuc.TenDanhMucOther = theDanhMucSanPham.TenDanhMucOther;
                    theDanhMuc.TenDanhMucVN = theDanhMucSanPham.TenDanhMucVN;
                    Int32 DanhMucOut = DanhMucSanPhamProvider.IUDanhMucSanPham(theDanhMuc, true);// insert vào database

                    //Nếu danh mục được chọn có danh mục con thì copy cả danh mục con vào danh mục mới
                    DanhMucCon(DanhMucOut, theDanhMucSanPham.DanhMucID, theDanhMuc.MenuLevel);
                   
                }
            
            }
            try
            {
                // nếu là di chuyển
                if (Session["Type"].ToString() == "Move")
                {
                    // lấy dữ liệu trên session gán vào mảng
                    ArrayList arr = (ArrayList)Session["ArrayListID"];
                    //duyệt mảng
                    for (int i = 0; i < arr.Count; i++)
                    {
                        //lấy danh mục sản phẩm theo ID
                        DanhMucSanPham theDanhMucSanPham = DanhMucSanPhamProvider.GetDanhMucSanPhamByDanhMucID(Int32.Parse(arr[i].ToString()));

                        DanhMucSanPham theDanhMuc = new DanhMucSanPham();
                        theDanhMuc.DanhMucID = theDanhMucSanPham.DanhMucID;
                        theDanhMuc.IconTrangThai = theDanhMucSanPham.IconTrangThai;
                        theDanhMuc.LuongTruyCap = theDanhMucSanPham.LuongTruyCap;
                        theDanhMuc.ChuyenMucChaID = theDanhMucCha.DanhMucID;
                        //gán lại level cho danh mục sản phẩm
                        Int32 Thuong = theDanhMucSanPham.MenuLevel - theDanhMucCha.MenuLevel;
                        if (Thuong > 1)
                        {
                            theDanhMuc.MenuLevel = theDanhMucSanPham.MenuLevel - Thuong + 1;
                        }
                        else if (Thuong == 1)
                            theDanhMuc.MenuLevel = theDanhMucSanPham.MenuLevel;
                        else
                            theDanhMuc.MenuLevel = theDanhMucCha.MenuLevel + theDanhMucSanPham.MenuLevel;


                        theDanhMuc.SapXep = theDanhMucSanPham.SapXep;
                        theDanhMuc.TenDanhMucOther = theDanhMucSanPham.TenDanhMucOther;
                        theDanhMuc.TenDanhMucVN = theDanhMucSanPham.TenDanhMucVN;
                        // di chuyển danh mục và danh mục con sang danh mụ đã chọn
                        Int32 DanhMucOut = DanhMucSanPhamProvider.IUDanhMucSanPham(theDanhMuc, false);
                        // di chuyển danh mục con theo danh mục cha
                        DanhMucCon(DanhMucOut, theDanhMuc.DanhMucID, theDanhMuc.MenuLevel);
                    }
                }
                Response.Redirect("EHTCategory.aspx");
            }
            catch
            {
                if(IsVN==true)
                    ltrErorr.Text = HelpMethod.ErorrLogin(HangSo.Move_ErorrVN);
                else
                    ltrErorr.Text = HelpMethod.ErorrLogin(HangSo.Move_ErorrOther);
                return;
            }
        }
        /// <summary>
        /// Hàm lấy danh mục con theo danh mục cha và di chuyển(copy) theo danh mục cha
        /// </summary>
        /// <param name="DanhMucOut"></param>
        /// <param name="DanhMucID"></param>
        /// <param name="MenulLeve"></param>
       
        public void DanhMucCon(Int32 DanhMucOut, Int32 DanhMucID, Int32 MenulLeve)
        {
            DataSet ds = DanhMucSanPhamProvider.GetDanhMucSanPhamByParentID(DanhMucID); // lấy tất cả danh mục con theo danh mục cha ID

            if (ds.Tables[0].Rows.Count > 0)
            {
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    DanhMucSanPham theDanhMucCon = new DanhMucSanPham();
                    theDanhMucCon.ChuyenMucChaID = DanhMucOut;                    
                    theDanhMucCon.IconTrangThai = ds.Tables[0].Rows[i]["IconTrangThai"].ToString();
                    theDanhMucCon.LuongTruyCap = Int32.Parse(ds.Tables[0].Rows[i]["LuongTruyCap"].ToString());
                    theDanhMucCon.SapXep = Int32.Parse(ds.Tables[0].Rows[i]["SapXep"].ToString());
                    theDanhMucCon.TenDanhMucOther = ds.Tables[0].Rows[i]["TenDanhMucOther"].ToString();
                    theDanhMucCon.TenDanhMucVN = ds.Tables[0].Rows[i]["TenDanhMucVN"].ToString();
                    theDanhMucCon.MenuLevel = MenulLeve + 1;
                    if (Session["Type"].ToString() == "Copy")
                    {
                        theDanhMucCon.DanhMucID = -1;
                        DanhMucSanPhamProvider.IUDanhMucSanPham(theDanhMucCon,true);
                    }
                    if (Session["Type"].ToString() == "Move")
                    {
                        theDanhMucCon.DanhMucID = Int32.Parse(ds.Tables[0].Rows[i]["DanhMucID"].ToString());
                        // di chuyển danh mục con theo danh mục cha
                        DanhMucSanPhamProvider.IUDanhMucSanPham(theDanhMucCon, false);
                    }
                }
            }
        }
    }
}